perm filename WORDS.F4[XX,LCS]7 blob sn#209696 filedate 1976-04-06 generic text, type T, neo UTF8
00100	C  WORDS, TYPE, SETLET, SETNUM ,(NEWR,LNEND), FILLMS, PRESCN
00200		
00300		SUBROUTINE WORDS
00330		INTEGER PWDS
00400		COMMON R2,JA,RC,J3,R3,R4,R5,R6,R7,X,IA,N
00500		1,Z,J,KN,ISET,Q(27),JR /PTR/PWDS(250),ITEM,LL,IS,IX
00550	C  /SCX/ IS ALSO IN SCMSS, NOTBMS, RHYTH, BEAMS, NEWR(IN LOOP.FAI)
00560	C **** WHEN JALPHA IS EXTENDED FIX LOOP AT 365 AND SUBR. NEWR(IN LOOP)
00570	C **** AND SUBR. SCMSS, NOTBMS, RHYTH AND BEAMS
00600		COMMON/SCX/RHY(4),JALPHA(30),J4,L,Y,K,RX,RZ,RA,J5
00700		1/XRN/RN(4000) /ALF/INP(72),ML
00702		COMMON/SCN/LEL,LR,LU,LD,KSLA,LE,LC,LS,LF,LA,LI,LW
00710		EQUIVALENCE (IBLA,JALPHA(12))
00900		DATA JALPHA/',','-','.','=','(',')','+','*',':',';'
01000		1 ,'"',' ','$','%','&','@','#','<','>',1H','?','!'
01050		1 ,"555004020100,"565004020100,"571004020100,"5004020100,
01060		1 "135004020100,0,0,0/
01100	C   FOR ENTERING TEXT: 16, POS., STF., NT#., SIZE,  RHYTHM≠0
01200	C  R6 ≠0 CALLS NOTE NUM. SETUP
01210		JR=-1
01220		IF(R3.NE.999)GO TO 131
01230		TYPE 331
01240		ACCEPT 631,KN
01250		IF(LOOK(KN).EQ.0)RETURN
01260	C  GO BACK IF NO FILE FOUND
01270		CALL IFILE(21,KN)
01280		READ(21,431)JR,INP
01290		JR=0 
01295		R6=1
01300		GO TO 531
01305	631	FORMAT(A5)
01310	331	FORMAT(' TYPE FILE NAME-- '$)
01320	431	FORMAT(I,72A1)
01390	131	CALL TYPE
01400	531	DO 31 KN=72,1,-1
01500	31	IF(INP(KN).NE.IBLA)GO TO 33
01600	C  KN=NUM OF CHARACTERS
01700	C  DON'T END WITH '*' IN 'LETTERS' INPUT!!!!!!!!
01800	C  , - . = ( ) + * : ; " BLANK (FONTS) ' --THIS IS ORDER PAST ALPHAB.
01810	C [=QTR NOTE, ]=HALF NOTE, ↑=#, ↓=b, ↔=NATURAL, 3 SLOTS STILL OPEN
01820	
01900	C  48 $=UPPER CASE, 49 %=LOWER, 50 &=NON-ITALICS, 51 @=ITALICS
01950	C  48 AND 49 NOT NEEDED NOW  6/75
02000	C  52 #=RETURN TO PRIMITVE FONT, 53 <=OPEN, 54 >=FILLED. ('=55)
02100	33	L=1
02105		RC=0
02110		IF(INP(KN).EQ.KSLA)GO TO 133
02120		KN=KN+1
02130		INP(KN)=KSLA
02140	C  SO TRAILING BLANKS ARE DELETED.
02200	133	LL=1
02205		RZ=0 
02210		ISET=IS
02220		IF(R3.LT.1000)GO TO 233
02225		RZ=1
02230		R3=R3-1000.
02240		RC=R3
02250	C  ADD 1000 TO POSITION (R3+1000) FOR CENTERING AT POS. R3.
02300	233	RA=R3
02400	C   RA= ADDS UP TOTAL SPACE NEEDED
02500		RX=0
02800	C  FOR SETLET
02900	368	RN(IS+1)=16
03000		RN(IS+3)=RA
03100	C  NEXT IS A MAGIC NUMBER FOR SPACING LETTERS.
03200	CC	Y=39.6*RSTJ3
03300	C  RBL IS FOR CONTROL(NON-LETTERS, ETC.) CHARACTERS.
03400		RN(IS+2)=R2
03500		RN(IS+4)=R4
03600		CALL NOZERO(R5)
03700		RN(IS+5)=R5
03750		IF(R5.GE.100)R5=R5-100
03775	C >100 FOR TEXT IN ORCH SCORES TO GO IN ALL SEP. PARTS.
03800	
03900		DO 364 J5=6,8
04000		Z=0
04100		DO 363 J4=1,4
04200	361	IA=INP(L)
04300		IF(IA.NE.KSLA)GO TO 365
04400	C  NEG. SPACE IS ENTERED IN P1 FOR EACH "FIRST" ITEM.
04500		J3=J4
04600		DO 367 KA=J5,8
04700		X=99.
04800		DO 366 K=J3,4
04900		Z=Z+X
05000	366	X=X*100.0
05100		RN(IS+KA)=Z
05200		J3=1
05300	367	Z=0
05400		L=L+1
05500	C  L=CHARACTER COUNTER
05600		GO TO 369
05700	365	DO 362 J=1,30
05800		IF(IA.NE.JALPHA(J))GO TO 362
05900		N=35+J
06000	C  FOUND A SPECIAL CHARACTER.
06010		K=N
06055		IFNT=0
06100		GO TO 39
06200	362	CONTINUE
06300	38	N=10-(LA-INP(L))/536870912
06400	C   MAGIC NUMBER TO FIND LETTERS
06500		IF(N.LT.10)N=N+7
06510		K=N
06520		IF(KFNT)IFNT=0
06550		IF(N.LT.40)GO TO 39
06560		N=N+28
06565		KFNT=-1
06567	C  TO INITIALIZE AUTOMATIC LOWER CASE SYSTEM.
06570		K=N-60
06571	C  K IS ACTUAL LETTER NUMB. (a=10, ETC.)
06572		IFNT=-1
06575	C LOWER CASE LETTERS ARE 60 .GT. UPPER. A=10, a=70, b=71, etc.
06600	39	L=L+1
06700	C  BLANK=99(=47)
06800		CALL SPACER(K,IFNT,RX,3.32)
06900	C  NUM↑↑=19.7/5.96  FOR BASIC SPACE PER LETTER.
07000	C  GET SPACE FOR THIS LETTER.
07100		X=N
07200		IF(J4.EQ.2)X=X*10000.
07300		IF(J4.EQ.3)X=X*100.
07400		IF(J4.EQ.1)X=X*1000000.
07500	363	Z=Z+X
07600	364	RN(IS+J5)=Z
07700	369	RN(IS+9)=RX
07800		RN(IS+10)=RZ
07850		IF(RC.NE.0)RN(IS+10)=RC
07875		RC=0
07900	C  FOR CONTINUATION
08000		RA=RA+RX*R5
08050		IF(IA.EQ.KSLA)RA=RA+5
08075	C  SPACES GROUPS DIVIDED BY SLASHES
08100		RX=0
08200		RN(IS)=7+RZ
08300		IS=IS+10+RZ
08400		LL=LL+1
08500		PWDS(ITEM+LL)=IS
08600	C  PUT IT IN THE PNTR ARRAY
08700		RZ=1.
08800		IF(IA.EQ.KSLA)RZ=0
08900		IF(L.LE.KN)GO TO 368
09000	
09100		INP(1)=0
09200	C   SO IT WON'T FIND A COMMAND IN THE MAIN PROG.
09300		IF(R6.NE.0)CALL SETLET
09325		IF(KFNT)IFNT=0
09350		KFNT=0
09400		END
09500	C  PACKS 4 CHARS/WD, 3 WDS/ITEM.
09600	
09700		SUBROUTINE TYPE
09710		COMMON R2,JA,CENTR,J2,R3,R4,R5,RJQ(17),JQ(14),M,K,J,X,A,B
09800		COMMON/ALF/INP(72),ML
09900		TYPE 8005
10000		ACCEPT 2114,INP
10100	2114	FORMAT(72A1)
10200	8005	FORMAT(' TYPE --'/)
10250	CC**    	IF(JA.NE.16)CALL LNEND
10275	C  FOR 'SCORE' INPUT
10300		END
10400	
10600		SUBROUTINE SETLET
10800		COMMON/SCM/V(78),Y,LCNT,STAFF,JLIST(200),REND
10900		COMMON R2,JA,CENTR,J2,R3,R4,R5,RJQ(17),JQ(14),M,K,J,X,A,B
11000		1 /FLM/RPOS(2,300) /PTR/PWDS(250),ITEM,L,I,IX /XRN/RN(4000)
11100		COMMON/FRMT/F78F(1),FA1(1),FA5(1),KK
11110		DIMENSION SU(320)
11146		COMMON/POSI/STF(-3/4),J102,POS/DPY/ST(4000),WDS(250),MEDIT,IGO
11200		EQUIVALENCE (J5,JQ(3)),(ISET,RJQ(9)),(SU(1),ST(3600))
11250		DATA DISP/0.0/
11260		KK=L
11280	C  L=NUMBER OF ITEMS TYPED +1
11300		M=1
11350		R4=20
11400		RPOS(1,1)=0
11500		DO 1 K=1,ITEM
11600		IF(FINDIT(K))GO TO 1
11700	C SKIPS NON-NOTES AND WRONG STAFF
11800		M=M+1
11900		RPOS(1,M)=RN(L+3)
12100	1	CONTINUE
12150		IF(M.EQ.1)RETURN
12175	C  M=1 MEANS NO NOTES ON THIS LINE
12200	CXX	CALL SETNUM
12210		CALL DPYSET(3,SU,320)
12222		CALL DPYBRT(6)
12234	CC	R6=1
12246		POS=STF(IFIX(R2))
12282		J5=1
12300		CALL SORT2(RPOS,M)
12400		K=2
12500	22	IF(IFIX(RPOS(1,K)*100.).NE.IFIX(RPOS(1,K-1)*100.))GO TO 2
12550	C  ROUNDS OFF POSITION TO 2 DECI. PLACES
12600		M=M-1
12700		DO 20 J=K,M
12800	20	RPOS(1,J)=RPOS(1,J+1)
12900	C  DELETES DOUBLE-STOPS - DOESN'T PUT NUM OVER 1ST NOTE.
13000		GO TO 22
13100	2	K=K+1
13200		IF(K.LT.M)GO TO 22
13300		DO 4 K=2,M
13400		R3=RHORZ(RPOS(1,K))
13500		CALL PNUM
13600		J5=J5+1
13700	4	IF(J5.EQ.10)J5=0
13800		CALL DPYOUT(3)
13900		CALL SETPOG(1)
14000		RPOS(1,M+1)=200
14100		J=1
14120		IF(B)GO TO 30
14130	C  B IS JR IN 'WORDS'    NEXT FOR READIN FILES WITH WORDS
14140		READ(21,F78F)X,(V(K),K=1,77)
14150		GO TO 31
14200	30	CALL TYPE
14300		REREAD F78F,V
14400	31	X=V(J)+1
14410		DO 32 K=77,1,-1
14420	32	IF(V(K).NE.0)GO TO 320
14430	320	IF(K.GT.KK)KK=-1
14440	C  NOW PAIRS OF NUMS WILL SET INDIV. VERT. POS.; SINGLE DON'T
14600	3	K=X
14610	CC	MM=ISET+4
14700		A=RPOS(1,K)
14800		B=RPOS(1,K+1)
14900		RN(ISET+3)=A+(B-A)*(X-K)+DISP
14950	C  DISP IS DISPLACEMENT OF CURRENT LETTERS.
15000	CC	IF(RN(MM).NE.0)GO TO 5
15010		IF(KK.GT.0)GO TO 5
15020	C  NEXT FOR PAIRS OF NUMS.
15100	CC	RN(MM)=V(J+1)
15110		RN(ISET+4)=V(J+1)
15200		J=J+2
15300		GO TO 6
15400	C IF P4≠0 TYPE ONLY 1 # FOR EACH ITEM. ALL ITEMS WILL BE AT VRT PS OF P4
15500	C TYPE Nn, Vert pos/Nn, Vert pos/  OR  Nn/Nn/ (if P4≠0)
15600	5	J=J+1
15700	6	ISET=ISET+RN(ISET)+3
15710		IF(RN(ISET).EQ.8)GO TO 6
15720	C  =8 MEANS MORE LETTERS TO COME.
15800		X=V(J)+1
15900		IF(X.GT.1)GO TO 3
16000	C CAN'T PUT LETTER AT POS. 0 *********
16100		END
16200	
21700	CF	SUBROUTINE NEWR
21800	CF	COMMON/PTR/PWDS(250),ITEM,LL,IS,IX
21900	CF	COMMON/XRN/RN(4000)
22000	CF	COMMON/SCM/V(78),I,LCNT,STAFF,LIST(200),REND
22100	CF	COMMON/SCX/RHY(4),JALPHA(22),JX,U,JZ,IRHY,J4,KA,KB,IZ
22200	CF	1 /SC/J,L,MK,ISKP,XMINUS,N,IEXP,LK,NNUM,JJ,JA,DBST,NFLG
22300	CF	1 ,IXX,ISEMI,IQT,VX(50),IAMP,K,KN,M,MODE,IBLA
22400	CF	DIMENSION R(10,80)
22500	CF	EQUIVALENCE (R,RN(3001))
22600	
22700	CF	IF(MODE.NE.1)GO TO 1
22800	CF	IK=IS
22900	CF	JIT=ITEM
23000	CF1	IS=IK
23100	CF	ITEM=JIT+1
23200	C  MODE 1=NOTE, 2=RHYTH, 3=ACCENTS, 4=BEAMS, 5=SLURS.
23300	CF	DO 2 K=1,IZ
23400	CF	IF(R(8,K).EQ.9999.)GO TO 2
23500	C  SKIPS INVIS RESTS - ONLY NEEDED IN RHYTH.
23600	C  JUMP FOR BEAM CONT.
23700	CF	IEND=-1
23750	CF	RN(IS+3)=0
23760	CF	RN(IS+2)=0
23800	C  ↑↑↑↑ TO CLEAR ARRAY FOR SHORT ITEMS (CLEFS)
23900	CF	DO 3 L=9,1,-1
24000	CF	A=R(L,K)
24100	CF	IF(A.NE.0)GO TO 77
24150	CF	IF(IEND)GO TO 3
24200	CF77	IF(IEND)IEND=L
24300	CF	RN(IS+L)=A
24400	CF3	CONTINUE
24500	CF	IF(IEND.LT.3)IEND=3
24700	CF	CALL UPDATE(IEND-2)
24800	CF2	CONTINUE
24900	CF	END
25000	
25300		SUBROUTINE LNEND
25400	C  CHANGES LINE ENDS SO INPUT CAN LOOK LIKE NEW 'SCORE' INPUT.
25500		COMMON /ALF/INP(1),ML 
25510		COMMON/SCX/RHY(4),JALPHA(30),J4,L,Y,K,RX,RZ,RA,J5
25555		EQUIVALENCE (ISEMI,JALPHA(10)),(ISTAR,JALPHA(8))
25600		DO 2902 L=72,1,-1
25700		IF(INP(L).NE.'/')GO TO 2903
25800		INP(L)=ISEMI
25900		RETURN
26000	2903	IF(INP(L).NE.ISEMI)GO TO 2902
26100		INP(L)=ISTAR
26200		RETURN
26300	2902	CONTINUE
26400		END
26500	
26600	
27000	C**** CHANGE 1, 2 AND 3 TO JFCL IN DDT WHEN USING DISTORTION.(SEE 'LINES')
27100		SUBROUTINE FILLMS(L,IDAT,R2,CENTR,R6,R7)
27200		COMMON/DPY/ST(4000),WDS(250),MEDIT,IGO/DL/RSIZ,SAVER,NAME
27300		COMMON/DST/BB,CC/FLM/X(600)
27400		COMMON/ALF/INP(65),DX,RX,D,R,C,KK,J,ML
27500		DIMENSION IDAT(1),NX(600)
27600		EQUIVALENCE (NX,X)
27700		COMMON/PLTR/IPLT,RHT,DIS/LL/LL/STF/RR(8),RSTJ2
28000		DATA MD/6/ , RHT/1.0/
28100	C MD=DISPLAY   CHANGE XGP TO 1 IN DDT WHEN PLOTTING ON XGP!
28200		DX=DIS
28300		RX=RHT
28400		D=RSTJ2*R6
28500		R=RSTJ2*R7
28600	1	GO TO 10
28700		C=CC
28800		B=BB
28900	C  SAVES IT.  IT WILL RETURN LATER.
29000		BB=B/DIS
29100		CC=1000
29200	10	KK=-2
29300		DO 205 J=1,L
29400		CALL UNPACK(M,N,IDAT(J))
29500		KK=KK+3
29600		KX=KK+2
29700		NX(KX)=2
29800		IF(LL.EQ.3)NX(KX)=3
29900		X(KK)=ROFF((R2+D*M)*DIS)
30000		X(KK+1)=ROFF((CENTR+R*N)*RHT)
30100	2	GO TO 205
30200		X(KK+1)=X(KK+1)*(C-BB*(ABS(X(KK))))
30300	C  FOR DISTORTION
30400	205	CONTINUE
30500		NX(3)=KX
30600		DIS=1.0
30700		RHT=DIS
30800		M=MD
30900	CC	IF(IPLT)M=MP-IXRX
31000		IF(IPLT.GE.0)GO TO 20
31100	CC	M=RSIZ+.4
31200		M=1
31300		IF(RSIZ.GE.2.)M=2
31400	CC	IF(M.GT.XGP)M=XGP
31500	C  STOPS DISTORTION IN 'LINES'
31600	20	CALL FILLER(X,M)
31700	C  ******  CALLS NEW FILL.FAI (CLEM'S)
31800		DIS=DX
31900		RHT=RX
32000	3	RETURN
32100	C  NEXT TO RESET DISTORTION FACT.
32200		BB=B
32300		CC=C
32400		END
32500	
32600	
32700		SUBROUTINE PRESCN
32800	C  THIS SORTS OUT NEW INPUT FORMAT - CREATES OLD STYLE.
32900		COMMON/SCX/RHY(4),JALPHA(30),J4,L,Y,K,RX,RZ,RA,J5
33000		COMMON/SCN/LL,LR,LU,LD,LSL,LE,LC,LS,LF,LA,LI,LW
33100		DATA LL/'L'/,LR/'R'/,LU/'U'/,LD/'D'/,LE/'E'/,LSL/'/'/
33200		1,LC/'C'/,LS/'S'/,LF/'F'/,LA/'A'/,LI/'I'/,LW/'W'/
33300		DIMENSION IR(1)
33400		COMMON/ALF/INP(72),M/XRN/RN(4000)
33500		EQUIVALENCE (IR,RN(2001)),(LCM,JALPHA),(LBL,JALPHA(12))
33600		1,(LST,JALPHA(8)),(ISEMI,JALPHA(10)),(ICOL,JALPHA(9))
33650		1,(IDOT,JALPHA(3))
33700	C  CHECK THIS EQUIV.↑↑↑↑
33800	100	IF(ISM)5,55,555
33900	C  -1=PROCESS SOME MORE, 0=1ST TIME, 1=PUT OUT RHYTH
34000	C  !!!!! DON'T STOP IN THE MIDDLE!!!  ISM MUST BE 0 FIRST TIME!!!!
34100	55	JX=0
34200	5	K=0
34300		J=0
34400		I=JX
34500		JX=JX+72
34600	1	K=K+1
34700		M=INP(K)
34800	15	IF(M.EQ.LBL)GO TO 1
34900		IF(M.EQ.LCM)GO TO 1
35000	C  REMOVE BLANKS AND COMMAS
35100		JN=0
35200		IF(M.LT.'0')GO TO 677
35300		IF(M.LE.'9')GO TO 2
35400	677	MM=INP(K+1)
35500	3	IF(M.EQ.'P')GO TO 8
35600		IF(M.EQ.'O')GO TO 8
35700		IF(M.LT.LA)GO TO 777
35800		IF(M.GT.'G')GO TO 777
35900		IF(MM.EQ.LL)GO TO 777
36000		IF(MM.NE.LA)GO TO 8
36100	C  FINDS NOTES, PROX., AND ORDINARY, -- NOT 'BA' OR 'AL'
36200	777	IF(M.NE.LR)GO TO 9
36300		IF(MM.EQ.LE)JN=1
36400	C  CATCHES 'R' 'RI' 'REP'
36500		GO TO 8
36600	9	IF(M.EQ.LSL)GO TO 8
36700		IF(M.EQ.ISEMI)GO TO 8
36800		IF(M.EQ.LST)GO TO 8
36900		IF(M.EQ.ICOL)GO TO 8
37000		JN=-1
37100	8	J=J+1
37200		 INP(J)=M
37300		IF(M.EQ.'X')JN=1
37400	C  PICKS UP 4X ETC. FOR BOTH NOTES AND RHYTH.
37500		IF(JN.LE.0)GO TO 13
37600	C  PUTS 'REP' INTO RHYTH ALSO
37700		I=I+1
37800		IR(I)=M
37900	13	IF(M.EQ.LSL)GO TO 4
38000		IF(M.EQ.ISEMI)GO TO 4
38100		IF(M.EQ.LST)GO TO 4
38200		K=K+1
38300		M=INP(K)
38400		GO TO 8
38500	
38600	4	IF(JN.NE.0)GO TO 7
38700		I=I+1
38800		IR(I)=M
38900	7	IF(M.EQ.LSL)GO TO 1
39000		IF(M.EQ.ISEMI)GO TO 11
39100		IF(M.EQ.LST)GO TO 6
39200	
39300	2	I=I+1
39400		IR(I)=M
39500		K=K+1
39600		M=INP(K)
39700		IF(M.EQ.IDOT)GO TO 2
39800		IF(M.LT.'0')GO TO 15
39900		IF(M.LE.'9')GO TO 2
40000	C  NO BLANK NEEDED AFTER RHYTH.( /4.AS3/8/ ETC.)
40100		GO TO 15
40200	
40300	11	IF(IR(I).NE.ISEMI)IR(I)=ISEMI
40400		ISM=-1
40500		RETURN
40600	C  WE'LL COME BACK FOR MORE.
40700	
40800	6	IF(IR(I).NE.LST)IR(I)=LST
40900		JX=0
41000		ISM=1
41100	C AFTER THIS WE USE RHYTJ DATA.
41200		RETURN
41300	
41400	555	DO 12 K=1,72
41500		M=IR(K+JX)
41600		INP(K)=M
41700		IF(M.EQ.ISEMI)GO TO 10
41800	C  MORE THAN ONE LINE
41900	12	IF(M.EQ.LST)GO TO 14
42000	10	JX=JX+72
42100	C  MOVE TO THE NEXT 'LINE'
42200		RETURN
42300	14	ISM=0
42400		END